# My ~/.zshrc
# Sourcing so sourcing
source /etc/zsh/zprofile
#
if [ -f /usr/libexec/mc/mc.sh ]; then
    . /usr/libexec/mc/mc.sh
fi
######################################################

## Установка нормального поведения клавиш Delete, Home, End и т. д.
	bindkey -v
	bindkey "^[[2~" yank
	bindkey "^[[3~" delete-char
	bindkey "^[[5~" up-line-or-history
	bindkey "^[[6~" down-line-or-history
	bindkey "^[[7~" beginning-of-line
	bindkey "^[[8~" end-of-line
	bindkey "^[e"   expand-cmd-patch
	bindkey "^[[A"  up-line-or-search
	bindkey "^[[B"  down-line-or-search
	bindkey " "     magic-space
	bindkey '^I' complete-word

limit	stack	8192
limit	core	0
limit	-s

# Установка атрибутов доступа для вновь создаваемых файлов
umask	022

# Исправление поведения less - для ликвидации
# лишних Esc и прочего при выводе man-страниц
export LESS="-R"

# Установка alias
# alias для команд, не требующих коррекции, но требующих подтверждения
alias mv='nocorrect mv -i'
alias cp='nocorrect cp -iR'
alias rm='nocorrect rm -i'
alias mkdir='nocorrect mkdir'
#
alias h=history
alias grep='egrep --color=auto'
alias df='df -h'

# alias для nano
alias nw='nano -w'
# alias для редактирования конфигурационных файлов
alias mconf='vim /etc/make.conf'

## alias для команды ls
### показ классификации файлов в цвете и символически
alias ls='ls -F --color=auto'
### вывод в длинном формате
alias ll='ls -l'
### вывод всех файлов, включая скрытые, кроме . и ..
alias la='ls -A'
### вывод только каталогов
alias lsd='ls -ld *(-/DN)'
### вывод в один столбец
alias l1='ls -1'

# Установка глобальных псевдонимов для командных конвейеров
alias -g M=' |more'
alias -g L=' |less'
alias -g H=' |head' 
alias -g T=' |tail'
alias -g N='2>/dev/null' 

# alias для команды bashmount (sys-fs/bashmount - 
# A bash script that uses udisks to handle removable devices without dependencies on any GUI)
alias bm='bashmount'

# SHELL FUNCTIONS
setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" }
# csh compatibility
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
# Where to look for autoloaded function definitions
fpath=($fpath ~/.zfunc)

# This function make nice look for command "mount"
nicemount() { (echo "DEVICE PATH TYPE FLAGS" && mount | awk '$2=$4="";1') | column -t; }

# В логе emerge (/var/log/emerge.log) дата и время записываются в формате UNIX
# («количество секунд, прошедших с полуночи 1 января 1970 года без учета високосных секунд»).
# Сконвертировать время с помощю awk можно так
lemerge () { cat /var/log/emerge.log | awk -F: '{print strftime("%c", $1),$2}' | less }

# Autoload all shell functions from all directories in $fpath (following
# symlinks) that have the executable bit on (the executable bit is not
# necessary, but gives you an easy way to stop the autoloading of a
# particular shell function). $fpath should not be empty for this to work.
for func in $^fpath/*(N-.x:t); autoload $func

# automatically remove duplicates from these arrays
typeset -U path cdpath fpath manpath

### Приглашения командной строки
# Обычное приглашение
# PROMPT='%~%#=> '
PROMPT=$'%{\e[1;32m%}[%{\e[1;34m%}%~%{\e[1;32m%}]%{\e[1;31m%}%#%{\e[0m%}'
# Приглашение второй строки
PROMPT2='%i%U> '
# Приглашение с правой стороны экрана
if [[ $EUID == 0 ]]; then
    RPROMPT=$'%{\e[1;32m%}[%{\e[1;31m%}%m%{\e[1;32m%}]%{\e[1;32m%}[%{\e[1;33m%}%T%{\e[1;32m%}]%{\e[0m%}'
else
    RPROMPT=$'%{\e[1;32m%}[%{\e[1;34m%}%m%{\e[1;32m%}]%{\e[1;32m%}[%{\e[1;33m%}%T%{\e[1;32m%}]%{\e[0m%}'
fi
# RPROMPT=' %T %y%b'

# Настройки истории команд
HISTFILE=~/.zhistory
SAVEHIST=3000
HISTSIZE=3000
DIRSTACKSIZE=20

setopt APPEND_HISTORY
setopt HIST_IGNORE_SPACE
setopt HIST_REDUCE_BLANKS
setopt INC_APPEND_HISTORY
setopt NO_HIST_BEEP
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_SAVE_NO_DUPS
setopt HIST_FIND_NO_DUPS
# Use the same history file for all sessions
setopt SHARE_HISTORY
# Let the user edit the command line after history expansion (e.g. !ls) instead of immediately running it
setopt hist_verify

setopt extended_glob
setopt noequals
setopt nobeep
setopt CORRECT
setopt autocd
setopt nohup
setopt HASH_CMDS

# Set/unset  shell options
setopt   notify globdots correct pushdtohome cdablevars autolist
setopt   correctall autocd recexact longlistjobs
setopt   autoresume histignoredups pushdsilent noclobber
setopt   autopushd pushdminus extendedglob rcquotes mailwarning
unsetopt bgnice autoparamslash

# Autoload zsh modules when they are referenced
zmodload -a zsh/stat stat
zmodload -a zsh/zpty zpty
zmodload -a zsh/zprof zprof
zmodload -ap zsh/mapfile mapfile

# Для разворота сокращённого ввода типа cd d/e в docs/editors
# If you want to enable Portage completions and Gentoo prompt,
# emerge app-shells/zsh-completion and add
autoload -U compinit  promptinit
compinit
promptinit; prompt gentoo

# Completion Styles

# list of completers to use
zstyle ':completion:*::::' completer _expand _complete _ignored _approximate

# allow one error for every three characters typed in approximate completer
zstyle -e ':completion:*:approximate:*' max-errors \
'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
        
# insert all expansions for expand completer
zstyle ':completion:*:expand:*' tag-order all-expansions
    
# formatting and messages
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
    
# match uppercase from lowercase
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
    
# offer indexes before parameters in subscripts
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
    
# command for process lists, the local web server details and host completion
#zstyle ':completion:*:processes' command 'ps -o pid,s,nice,stime,args'
#zstyle ':completion:*:urls' local 'www' '/var/www/htdocs' 'public_html'
zstyle '*' hosts $hosts

# Filename suffixes to ignore during completion (except after rm command)
zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' \
'*?.old' '*?.pro'
# the same for old style completion
#fignore=(.o .c~ .old .pro)

# ignore completion functions (until the _ignored completer)
zstyle ':completion:*:functions' ignored-patterns '_*'

# enable cache for the completions
zstyle ':completion::complete:*' use-cache 1
